package Leetcode;

/**
 * 反转指定范围的节点
 * 给你单链表的头指针head和两个整数left和right， left <= right 。请你反转从位置left到位置right的链表节点，返回反转后的链表
 */
public class test92 {
    /**
     * 找到前驱节点后，首先把带反转的节点删了，然后头插到prev.next之后
     * @param head
     * @param left
     * @param right
     * @return
     */
    public ListNode reverseBetween(ListNode head, int left, int right) {
       ListNode dummyHead=new ListNode();
       dummyHead.next=head;
       ListNode prev=dummyHead;
       ListNode cur=dummyHead.next;
        for (int i = 0; i <left-1; i++) {
            prev=prev.next;
            cur=cur.next;
        }
        for (int i = 0; i <right-left; i++) {
            ListNode fir=cur.next;
            cur.next=cur.next.next;
            fir.next=prev.next;
            prev.next=fir;
        }
        return dummyHead.next;
    }
}
